/**
 * Created by yang on 2017/7/26.
 */
var ty_test = {},ty_test_array = [
    'Object',
    'Array',
    'Null',
    'Number',
    'Boolean',
    'Undefined',
    'String',
    'Function',
], ty_e_arry =[
  'String',
  'Array',
  'Object',
  'Function'
];
var ty_throw_msg = function (ty_msg) {
    return {
        developer: 'yangBin',
        error: ty_msg
    }
};
(function (w, o) {
    function ty_data_type (ty_type) {
        return function (ty_data) {
           return arguments.length!==1 ? (function () {
               throw ty_throw_msg('数据类型判断参数错误')
           })() : (o.prototype.toString.call(ty_data) === `[object ${ty_type}]`)
        }
    }
    function ty_data_empty (ty_value,ty_index) {
        if (ty_index <= 1) {
          return function (ty_data) {
            return ty_test[`is${ty_value}`](ty_data) && ty_data.length === 0;
          }
        } else if (ty_index === 2) {
          return function (ty_data) {
            return ty_test[`is${ty_value}`](ty_data) && (function () {
                var ty_flag = true;
                for (var ty_key in arguments[0]) {
                  ty_flag = false;
                }
                return ty_flag;
              })(ty_data)
          }
        } else {

        }
    }
    ty_test_array.map(function (ty_value) {
        ty_test[`is${ty_value}`] = ty_data_type(ty_value);
    })
    ty_e_arry.map(function (ty_value, ty_index) {
        ty_test[`isEmpty${ty_value}`] = ty_data_empty(ty_value,ty_index);
    });
    ty_test['isNaN'] = function (ty_data) {
        return ty_data !== ty_data;
    };
    ty_test['isElement'] = function (ty_data) {
     return arguments.length!==1 ? (function () {
          throw ty_throw_msg('数据类型判断参数错误')
        })() : (/\[object HTML[A-Za-z]*?Element\]/.test(o.prototype.toString.call(ty_data)))
    }
    ty_test['isNode'] = function (ty_data) {
      if(arguments.length!==1){
        throw ty_throw_msg('数据类型判断参数错误');
        return
      }
      return ty_test.isElement(ty_data) || o.prototype.toString.call(ty_data) === `[object Text]`;

    }
})(window,Object)
export {ty_test}
